package com.atzxh.datastructure.Tree;

/**
 * @author 小红同学
 * @create 2022-10-13-16:05
 * @description
 */
@SuppressWarnings({"all"})
public class ArrBinaryTreeDemo {

    public static void main(String[] args) {

        // 顺序存储二叉树时，一般会选择完全二叉树。

        int[] arr = new int[]{1,2,3,4,5,6,7};
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);

        System.out.println("=====前序遍历==========");
        arrBinaryTree.preOrder();
        System.out.println("=====按序号遍历========");
        arrBinaryTree.preOrder(1);

        System.out.println("=====中序遍历==========");
        arrBinaryTree.midOrder();
        System.out.println("=====按序号遍历========");
        arrBinaryTree.midOrder(1);
    }
}

class ArrBinaryTree {
    private int[] arr;

    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }

    public void preOrder(){
        this.preOrder(0);
    }
    public void midOrder(){
        this.midOrder(0);
    }

    /**
     *
     * @param index  数组的下标
     */
    // 前序遍历
    public void preOrder(int index) {
        if (arr == null || arr.length == 0) {
            System.out.println("数组为空！！！");
            return;
        }

        if (index < arr.length && index >= 0){
            System.out.println(arr[index]);
        }else {
            System.out.println("输入错误！！！");
        }

        // 左节点
        if (index * 2 + 1 < arr.length) {
            preOrder(index * 2 + 1);
        }

        // 右节点
        if (index * 2 + 2 < arr.length) {
            preOrder(index * 2 + 2);
        }

    }

    // 中序遍历
    public void midOrder(int index){
        if (arr == null || arr.length == 0) {
            System.out.println("数组为空！！！");
            return;
        }

        if (index < 0 || index >= arr.length) {
            System.out.println("输入错误！！！");
            return;
        }

        if (index * 2 + 1 < arr.length) {
            midOrder(index * 2 + 1);
        }

        System.out.println(arr[index]);

        if (index * 2 + 2 < arr.length) {
            midOrder(index * 2 + 2);
        }
    }
}